#include <stdio.h>

// 位运算   控制多个位 以及控制 1 个位
// 8  16 32  64
// &    与运算   一 一 得 一
// |    或运算   有一 得 一
// ^    异或     相同为0 不同为1
// ~ ^  同或     不同位0 相同位1
// ~    取反     。。。。
// <<   左移     
// >>   右移
/*
左移右移的使用

*/

int main(int argc, char const *argv[])
{
    char ch_1 = 60;
    char ch_2 = 80;

    printf("ch_1 & ch_2 = %d\n" , ch_1 & ch_2 );
    printf("ch_1 & ch_2 = %d\n" , ch_1 | ch_2 );

    printf("ch_1 & ch_2 = %d\n" , ch_1 ^ ch_2 );
    
    // 数据清空
    ch_1 = 0;

    // 向要指定的位置写1    对指定位置写 1 
    ch_1 |= (0x01 << 1);
    ch_1 |= (0x01 << 3);
    ch_1 |= (0x01 << 5);
    ch_1 |= (0x01 << 7);
    printf("ch_1 = %d\n" , ch_1 );

    // 对指定位置写0
    ch_1 = -1; // 全 1      1111 1111
    ch_1 &= ~(0x01 << 1);   //  1111 1101
    ch_1 ^= (0x01 << 3);
    ch_1 &= ~(0x01 << 5);   //  1111 1101
    ch_1 ^= (0x01 << 7);
    printf("ch_1 = %d\n" , ch_1 );
    return 0;
}

//  0000 0000
//  0000 0010

// 0011 1100 
// 0101 0000

// 0110 1100

// 0111 1100

// 0001 0000
/*
1、位操作
    通过位操作 操作一个 32 位的数据对其进行如下操作
        1、一次性操作两位   对 这个32位数据中的  5位 和 6位 变成11
        2、一次性操作两位   对 这个32位数据中的  7位 和 8位 变成10
        3、一次性操作两位   对 这个32位数据中的  9位 和 10位 变成01
        4、一次性操作两位   对 这个32位数据中的  11位 和 12位 变成00
2、写一个小的登录
    功能：
        1、用户可以循环登录 例如输入错了一次密码 可以在进行输入
        2、用户只能输错 3 次 3次后自动退出程序

3、写博客 
    1、对于今天内容的复习
    2、作业的代码以及效果展示在 博客中
*/